package com.javaweb.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @desc: TODO: 使用注解 @NPECatch, 并使用@within, @annotation
 *            实现对类级别或方法级别的方法执行中的异常进行统一捕获处理。
 *            处理的逻辑为，输出在控制台。
 * @author:
 * @date:
 */
@Aspect
@Component
public class NullExceptionAspect {
    @AfterThrowing(pointcut = "@within(com.javaweb.aop.NPECatch) || @annotation(com.javaweb.aop.NPECatch)", throwing = "exception")
    public void handleNullPointerException(JoinPoint joinPoint, Throwable exception) {
        if (exception instanceof NullPointerException) {
            System.out.println("方法：" + joinPoint.getSignature().getName() + " 发生空指针异常。异常信息：" + exception.getMessage());
        } else {
            System.out.println("方法：" + joinPoint.getSignature().getName() + " 发生其他异常。异常信息：" + exception.getMessage());
        }
    }
}
